class Solution {
public:
    int findMin(vector<int>& nums) {
        //思路：前一半如果有序，拿出第一个作为min1,后一半如果无序，二分；后一半的前半是否有序..
        int begin = 0,len = nums.size()-1,end = len;
        int m=2147483647;
        while(begin<=end){//4 5 6 7 0 1 2
            int mid = (end-begin)/2+begin;
            if (nums[mid]>=nums[begin]){
                //前半部分有序
                m = min(m,nums[begin]);
                begin = mid + 1;//去搜后半部分
            }else{
                //后半部分有序  [mid,end]有最小值 nums[mid]
                m = min(m,nums[mid]);
                end = mid - 1;//去搜前半部分
            }
        }
        return m;
    }
};